let express =  require('express')
let fs = require('fs')
let path = require('path')
let jwt = require('jsonwebtoken')


//创建一个子路由对象（用来管理一部分后端路由）
let userRouter =  express.Router()

//分页（查询）接口
//设置接口 //地址都是以斜杠开头 //箭头函数是请求处理器
userRouter.get('/list', (req, res) => {

    var { page, count } = req.query

    //读取users.json文件中的用户数据
    let filepath = path.join(__dirname , '../json/users.json')
    let arr =  fs.readFileSync( filepath )
    arr = arr.toString()?JSON.parse( arr ): []

    //分页
    let newarr = arr.slice((page - 1) * count, page * count)
    //返回数据
    res.send({ code: 200, msg: '请求成功', list: newarr })
})

//模糊搜索接口
userRouter.get('/search', (req, res) => {
    //接收参数
    let { searchkey } = req.query

    //读取users.json文件中的用户数据
    let filepath = path.join(__dirname , '../json/users.json')
    let arr =  fs.readFileSync( filepath )
    arr = arr.toString()?JSON.parse( arr ): []

    //根据参数，从用户的name属性中进行过滤
    let newarr = arr.filter((item)=>{
        //indexof()返回的是下标，没找到返回-1
        // return item.name.indexOf(searchkey) != -1
        //includes() 返回true/false
        return item.name.includes(searchkey)
    })
    //返回数据
    res.send({ code:200,msg:'查询成功',list:newarr })
})


//登录接口
userRouter.post('/login', (req, res) => {

    //想要接收post类型请求的参数，必须提前设置能能解析post请求参数的中间件 express.json 和 express.uurlencoded
    let { phone, pass } = req.body
    // console.log(phone , pass);

    //读取users.json文件中的用户数据
    let filepath = path.join(__dirname , '../json/users.json')
    let arr =  fs.readFileSync( filepath )
    arr = arr.toString()?JSON.parse( arr ): []

    //用来自客户端的数据做判断，判断是否在服务端用户列表中
    let i = arr.findIndex((item , index)=>{
        return item.phone == phone && item.pass == pass
    })

    //如果i不是-1 ， 说明来自客户端的数据是合法的
    if( i != -1 ){
        //登陆成功，生成token字符串（身份令牌）
        //借助第三方包 jsonwebtoken 生成token字符串
        //jwt.sign( 加密的数据,密钥,{ 算法,过期时间 } )

        let token = jwt.sign( { phone },"1234",{ algorithm:'HS256',expiresIn:60*5 } )

        //登陆成功时可以一并返回 登陆成功的用户信息以及登录令牌
        res.send({ code: 200, msg: '登陆成功！' , userinfo:arr[i] , token})
    }
    else{
        res.send({ code: 400, msg: '登陆失败！' })
    }

})

//注册
userRouter.post( '/register' , ( req , res )=>{
    //获取注册相关的参数
    let { phone } = req.body //phone , pass , email , name
    console.log(req.body);
    //读取users.json文件中的用户数据
    let filepath = path.join(__dirname , '../json/users.json')
    let arr =  fs.readFileSync( filepath )
    arr = arr.toString()?JSON.parse( arr ): []

    //判断新用户是否已经存在
    let i = arr.findIndex( (item)=>{
        return item.phone == phone
    } )

    if( i != -1){ //用户已存在，注册失败
        res.send({ code:400 , msg:'该手机号已注册，注册失败！' })
    }
    else{
        //添加新用户到users.json中
        arr.push( { ...req.body , ingroup:'编辑组' , isadmin:true , status:true} )
        fs.writeFileSync( filepath , JSON.stringify( arr ) , 'utf8' )
        res.send({ code:200 , msg:'注册成功！' })
    }
 
} )

//删除
userRouter.post( '/delete' , (req , res)=>{
    //获取手机号 参数
    let {phone} = req.body
    //读取users.json文件中的用户数据
    let filepath = path.join(__dirname , '../json/users.json')
    let arr =  fs.readFileSync( filepath )
    arr = arr.toString()?JSON.parse( arr ): []

    //在arr中查找手机号对应的用户
    let i = arr.findIndex((item)=>{
        return item.phone == phone
    })
    if( i != -1 ){ //条件成立 ， 说明 找到了需要删除的用户，它在arr中的下标是 i
        arr.splice( i , 1 )
        fs.writeFileSync( filepath , JSON.stringify( arr ) , 'utf8' )
        //分页
        let newarr = arr.slice( 0 , 2 )
        res.send({ code:200 , msg:'删除成功！' , list:newarr })
    }else{
        res.send({ code:400 , msg:'删除失败！' })
        
    }
} )

//导出这个子路由对象
module.exports = userRouter